/*
 * ./src/trie_commandes.h
 * Copyright (C) 2009 alexises
 * 
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef TRIE_COMMANDES_H
#define TRIE_COMMANDES_H
#include <libircclient/libircclient.h>
#include "struct.h"

trie_commandes_t *init_commandes(char token, int* nb_commandes);
/**
 * \brief init_commandes : intialise la liste des commandes du bot
 * \param token token utilisé par le bok
 * \param nb_commandes nombres de commandes
 * \return liste des commandes triée dans une structure trie_commandes_t
 */
void ajouter_commande(trie_commandes_t * commandes, char *nom_commande,
		      void (*callback) (donnee_de_control *, const char *, irc_session_t *, const char **, size_t), char token, char *short_desc,
		      char *long_desc);
/**
 * \brief ajouter_commande : ajoute une commande a la liste des commandes
 * \param commandes liste des commandes
 * \param nom_commande nom de la commande
 * \param callback fonction a appelé lors de la detection de la commande
 * \param short_desc description courte pour la commande aide
 * \param long_desc description longue pour la commande aide
 * \return aucun
 */
int qsort_compare(const void *case1, const void *case2);
/**
 * \brief qsort_compare : fonction de comparaison pour le trie rapide
 * \param case1 premiére case a comparer
 * \param case2	deuxiéme case a comparer
 * \return renvois un nombre positif si case 1 est au dessus
 * \return renvois un nombre négatif si case 1 est en dessous
 */
trie_commandes_t *rechercher_commandes(const char *nom, trie_commandes_t * cmd, int nb_cmd);
/**
 * \brief rechercher_commandes : recherche une commande dans la liste des commandes en utilisent une recherche dichotomique
 * \param nom nom de la commande a chercher
 * \param cmd liste des commandes
 * \param nb_cmd nombre de commandes dans la liste
 * \return renvois null si non trouver
 * \return renvois un pointeur sur la commande si trouver
 */
#endif
